package com.ruoyi.common.base.chat.mapper;


import com.ruoyi.common.base.chat.domain.ChatMessage;
import com.ruoyi.common.base.chat.dto.ChatMessageAppListCondition;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 会话记录Mapper接口
 *
 * @author gdk
 * @date 2023-05-15
 */
public interface ChatMessageMapper {
    /**
     * 查询会话记录
     *
     * @param id 会话记录主键
     * @return 会话记录
     */
    public ChatMessage selectChatMessageById(Long id);

    /**
     * 查询会话记录列表
     *
     * @param chatMessage 会话记录
     * @return 会话记录集合
     */
    public List<ChatMessage> selectChatMessageList(ChatMessage chatMessage);

    /**
     * 新增会话记录
     *
     * @param chatMessage 会话记录
     * @return 结果
     */
    public int insertChatMessage(ChatMessage chatMessage);

    /**
     * 修改会话记录
     *
     * @param chatMessage 会话记录
     * @return 结果
     */
    public int updateChatMessage(ChatMessage chatMessage);

    /**
     * 删除会话记录
     *
     * @param id 会话记录主键
     * @return 结果
     */
    public int deleteChatMessageById(Long id);

    /**
     * 批量删除会话记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteChatMessageByIds(Long[] ids);

    /**
     * 记录AI重新生成的回答
     *
     * @param message message
     * @return {@link int}
     * @author gdk
     * @since 2023/5/16 16:39
     */
    int retry(ChatMessage message);

    /**
     * app集合查询
     *
     * @param condition 条件
     * @return {@link List< ChatMessage>}
     * @author gdk
     * @since 2023/5/16 17:15
     */
    List<ChatMessage> appList(ChatMessageAppListCondition condition);

    /**
     * 计数
     *
     * @param condition 条件
     * @return {@link int}
     * @author gdk
     * @since 2023/5/16 17:31
     */
    int count(ChatMessage condition);

    /**
     * 根据chatIdList删除
     *
     * @param condition  条件
     * @param chatIdList chatIdList
     * @return {@link int}
     * @author gdk
     * @since 2023/5/16 17:36
     */
    int removeByChatIdList(@Param("condition") ChatMessage condition,
                           @Param("chatIdList") List<Long> chatIdList);

    /**
     * AI聊天时，获取上下文
     *
     * @param userId        userId
     * @param chatId        chatId
     * @param chatMessageId 重新回答时该参数存在，剔除该消息
     * @param pageSize      条数
     * @return {@link List< ChatMessage>}
     * @author gdk
     * @since 2023/5/22 15:17
     */
    List<ChatMessage> listAIChatContext(@Param("userId") Long userId,
                                        @Param("chatId") Long chatId,
                                        @Param("chatMessageId") Long chatMessageId,
                                        @Param("pageSize") Integer pageSize);
}
